package com.ruoyi.procurement.service.impl;

import java.util.List;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.BaseUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.procurement.domain.PsGoods;
import com.ruoyi.procurement.service.IPsGoodsService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.procurement.mapper.PsGoodsTypeMapper;
import com.ruoyi.procurement.domain.PsGoodsType;
import com.ruoyi.procurement.service.IPsGoodsTypeService;

/**
 * 物品标准Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-10-10
 */
@Service
public class PsGoodsTypeServiceImpl implements IPsGoodsTypeService 
{
    @Autowired
    private PsGoodsTypeMapper psGoodsTypeMapper;
    @Autowired
    private IPsGoodsService iPsGoodsService;

    /**
     * 查询物品标准
     * 
     * @param id 物品标准主键
     * @return 物品标准
     */
    @Override
    public PsGoodsType selectPsGoodsTypeById(String id)
    {
        return psGoodsTypeMapper.selectPsGoodsTypeById(id);
    }

    /**
     * 查询物品标准列表
     * 
     * @param psGoodsType 物品标准
     * @return 物品标准
     */
    @Override
    public List<PsGoodsType> selectPsGoodsTypeList(PsGoodsType psGoodsType)
    {
        return psGoodsTypeMapper.selectPsGoodsTypeList(psGoodsType);
    }

    /**
     * 新增物品标准
     * 
     * @param psGoodsType 物品标准
     * @return 结果
     */
    @Override
    public int insertPsGoodsType(PsGoodsType psGoodsType)
    {
        psGoodsType.setCreateTime(DateUtils.getNowDate());
        psGoodsType.setDelFlag("0");
        psGoodsType.setCreateByName(SecurityUtils.getLoginUser().getUser().getNickName());
        //查重
        checkForPlagiarism(psGoodsType.getPstName(),null);
        return psGoodsTypeMapper.insert(psGoodsType);
    }

    //查重
    public void checkForPlagiarism(String name,String id){
        LambdaQueryWrapper<PsGoodsType> psGoodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
        psGoodsTypeLambdaQueryWrapper.eq(PsGoodsType::getDelFlag,0);
        psGoodsTypeLambdaQueryWrapper.eq(PsGoodsType::getPstName,name);
        if (StringUtils.isNotEmpty(id)){
            psGoodsTypeLambdaQueryWrapper.ne(PsGoodsType::getId,id);
        }
        List<PsGoodsType> psGoodsTypes = psGoodsTypeMapper.selectList(psGoodsTypeLambdaQueryWrapper);
        if (CollUtil.isNotEmpty(psGoodsTypes)){
            throw new ServiceException("该标准已经存在！");
        }
    }
    /**
     * 修改物品标准
     * 
     * @param psGoodsType 物品标准
     * @return 结果
     */
    @Override
    public int updatePsGoodsType(PsGoodsType psGoodsType)
    {
        //查重
        checkForPlagiarism(psGoodsType.getPstName(),psGoodsType.getId());
        psGoodsType.setUpdateTime(DateUtils.getNowDate());
        return psGoodsTypeMapper.updateById(psGoodsType);
    }

    /**
     * 批量删除物品标准
     * 
     * @param ids 需要删除的物品标准主键
     * @return 结果
     */
    @Override
    public int deletePsGoodsTypeByIds(String[] ids)
    {
        for (String id : ids) {
            //是否有库存 有就无法删除
            PsGoods psGoods = new PsGoods();
            psGoods.setGoodsTypeId(id);
            List<PsGoods> psGoods1 = iPsGoodsService.selectPsGoodsList(psGoods);
            if (CollUtil.isNotEmpty(psGoods1)){
                throw new ServiceException("库存关联，删除失败！");
            }
        }
        return psGoodsTypeMapper.deletePsGoodsTypeByIds(ids);
    }

    /**
     * 删除物品标准信息
     * 
     * @param id 物品标准主键
     * @return 结果
     */
    @Override
    public int deletePsGoodsTypeById(String id)
    {
        //是否有库存 有就无法删除
        PsGoods psGoods = new PsGoods();
        psGoods.setGoodsTypeId(id);
        List<PsGoods> psGoods1 = iPsGoodsService.selectPsGoodsList(psGoods);
        if (CollUtil.isNotEmpty(psGoods1)){
            throw new ServiceException("库存关联，删除失败！");
        }
        //是否有库存 有就无法删除
        return psGoodsTypeMapper.deletePsGoodsTypeById(id);
    }
}
